package xyz.icxl.kotlion.ext.view

import android.text.InputFilter
import android.widget.EditText
import com.blankj.utilcode.util.StringUtils
import java.lang.Exception
import java.math.BigDecimal


/**
 * 限制输入两位小数的[android.widget.EditText] 过滤器
 *
 * 用法：
 * ```kotlin
 *  mEditText.filters = arrayOf(twoDecimalPlacesFilter)
 * ```
 */
val twoDecimalPlacesFilter: InputFilter
    get() {
        val decimalNumber = 2;//小数点后保留位数
        return InputFilter { source, _, _, dest, _, dend ->
            //验证删除等按键
            if (StringUtils.isEmpty(source)) {
                return@InputFilter ""
            }
            //以小数点"."开头，默认为设置为“0.”开头
            if (source.equals(".") && dest.isEmpty()) {
                return@InputFilter "0."
            }
            //输入“0”，默认设置为以"0."开头
            if (source.equals("0") && dest.isEmpty()) {
                return@InputFilter "0."
            }
            //小数点后保留两位
            if (dest.contains(".")) {
                val index = dest.indexOf(".");
                if (dend - index >= decimalNumber + 1) {
                    return@InputFilter "";
                }

            }
            return@InputFilter null
        }
    }

/**
 * [android.widget.EditText.getText]转BigDecimal 如果转换失败返回[BigDecimal.ZERO]
 */
val EditText.textBigDecimalOrZero: BigDecimal
    get() = try {
        if (text.isNullOrEmpty()) {
            BigDecimal.ZERO
        } else {
            text.toString().toBigDecimal()
        }
    } catch (e: Exception) {
        BigDecimal.ZERO
    }